// 将一次完整的函数调用拆分为多次函数调用，每次传入的实参都是完整实参的一部分，每个拆分开的函数叫做不完全函数 partial function，每次函数调用叫做不完全函数调用 partial application。特点是每次调用都返回一个函数，知道得到最终运行结果为止。

// 不支持 bind 方法
if (!Function.prototype.bind) {
    Function.prototype.bind = function (o) {
        var self = this
        var boundArgs = arguments

        return function () {
            var args = []
            for (var i = 1; i < boundArgs.length; i++) {
                args.push(boundArgs[i])
            }
            for(var j = 0; j < arguments.length; j++) {
                args.push(arguments[j])
            }

            return self.apply(o, args)
        }
    }
}